package autojcode.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by lizhenyu on 2018/8/15
 */
public class CamelHelper {
    public static final char UNDERLINE = '_';
    /**
     * 驼峰格式字符串转换为下划线格式字符串
     *
     * @param param
     * @return
     */
    public static String camelToUnderline(String param) {
        if (param == null || "".equals(param.trim())) {
            return "";
        }
        int len = param.length();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            char c = param.charAt(i);
            if (Character.isUpperCase(c)) {
                sb.append(UNDERLINE);
                sb.append(Character.toLowerCase(c));
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }
    /**
     * 驼峰格式字符串转换为下划线格式字符串
     * 首字母大写
     * @param param
     * @return
     */
    public static String underline2CamelClass(String param) {
        if (param == null || "".equals(param.trim())) {
            return "";
        }
        int len = param.length();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            char c = param.toLowerCase().charAt(i);
            if (c == UNDERLINE) {
                if (++i < len) {
                    sb.append(Character.toUpperCase(param.charAt(i)));
                }
            } else {
                if(i!=0){
                    sb.append(c);
                }else {
                    sb.append(Character.toUpperCase(param.charAt(i)));
                }
            }
        }
        return sb.toString();
    }

    /**
     * 下划线格式字符串转换为驼峰格式字符串
     *
     * @param param
     * @return
     */
    public static String underlineToCamel(String param) {
        if (param == null || "".equals(param.trim())) {
            return "";
        }
        int len = param.length();
        StringBuilder sb = new StringBuilder(len);
        for (int i = 0; i < len; i++) {
            char c = param.toLowerCase().charAt(i);
            if (c == UNDERLINE) {
                if (++i < len) {
                    sb.append(Character.toUpperCase(param.toLowerCase().charAt(i)));
                }
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }
    /**
     * 下划线格式字符串转换为驼峰格式字符串2
     *
     * @param param
     * @return
     */
    public static String underlineToCamel2(String param) {
        if (param == null || "".equals(param.trim())) {
            return "";
        }
        StringBuilder sb = new StringBuilder(param.toLowerCase());
        Matcher mc = Pattern.compile("_").matcher(param);
        int i = 0;
        while (mc.find()) {
            int position = mc.end() - (i++);
            sb.replace(position - 1, position + 1, sb.substring(position, position + 1).toUpperCase());
        }
        return sb.toString();
    }


/*
    public static void main(String[] args) {
        String aaa = "app_vERrsin_fld";
        System.out.println(underlineToCamel(aaa));
        System.out.println(underlineToCamel2(aaa));
        System.out.println(underline2CamelClass(aaa));
        aaa = "appVersionFld";
        System.out.println(camelToUnderline(aaa));

    }*/
}
